package com.augurit.gzcgwsp.webservice;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.util.Locale;
import java.util.Properties;
import java.util.ResourceBundle;
import java.util.Vector;

import com.augurit.common.util.lang.StringUtils;
import com.jcraft.jsch.Channel;
import com.jcraft.jsch.ChannelSftp;
import com.jcraft.jsch.JSch;
import com.jcraft.jsch.Session;
import com.jcraft.jsch.SftpException;

public class SFTPUtil {
	/**
	* 连接sftp服务器
	* @param host 主机
	* @param port 端口
	* @param username 用户名
	* @param password 密码
	* @return
	*/
	public static ChannelSftp connect(String host, int port, String username,
	String password) {
		ChannelSftp sftp = null;
		try {
		JSch jsch = new JSch();
		jsch.getSession(username, host, port);
		Session sshSession = jsch.getSession(username, host, port);
		
		sshSession.setPassword(password);
		Properties sshConfig = new Properties();
		sshConfig.put("StrictHostKeyChecking", "no");
		sshSession.setConfig(sshConfig);
		sshSession.connect();
	
		Channel channel = sshSession.openChannel("sftp");
		channel.connect();
		sftp = (ChannelSftp) channel;
		
		} catch (Exception e) {
	
		}
		return sftp;
	}

	/**
	* 上传文件
	* @param directory 上传的目录
	* @param uploadFile 要上传的文件
	* @param sftp
	*/
	public static void upload(String directory, String uploadFile, ChannelSftp sftp) {
			try {
				sftp.ls(directory);
			} catch (SftpException e) {
				//首先查看下目录，如果不存在，系统会被错，捕获这个错，生成新的目录。
				try {
					sftp.mkdir(directory);
				} catch (SftpException e1) {
				
					e1.printStackTrace();
				}
				e.printStackTrace();
			} 
			try {
				sftp.cd(directory);
				File file=new File(uploadFile);
				sftp.put(new FileInputStream(file), file.getName());
				
			} catch (SftpException e) {
				e.printStackTrace();
			} catch (FileNotFoundException e) {
				e.printStackTrace();
			}
		
		
		
	
	}
	/**
	* 列出目录下的文件
	* @param directory 要列出的目录
	* @param sftp
	* @return
	* @throws SftpException
	*/
	public static Vector listFiles(String directory, ChannelSftp sftp) throws SftpException{
		return sftp.ls(directory);
	}



	/**
	* 删除文件
	* @param directory 要删除文件所在目录
	* @param deleteFile 要删除的文件
	* @param sftp
	*/
	public static void delete(String directory, String deleteFile, ChannelSftp sftp) {
	    try {
			sftp.cd(directory);
			sftp.rm(deleteFile);
		} catch (Exception e) {
		e.printStackTrace();
		}
	}

	/**
	 * 文件下载
	 * @param directory 服务器的文件目录
	 * @param downloadFile 下载的某个具体文件
	 * @param saveFile 要保存的文件
	 * @param sftp
	 */
  private void download(String directory, String downloadFile,
		 String saveFile, ChannelSftp sftp) {  
      	try {  
	          sftp.cd(directory);  
	          File file = new File(saveFile);  
	          sftp.get(downloadFile, new FileOutputStream(file));  
	       } catch (Exception e) {  
	           e.printStackTrace();  
	       }  
	   }  

  /**
   * 文件上传到服务器指定目录
   * @param directoryFile 目录文件 如：/resource/AttachFile
   * @param filename 文件名称 如D:\test.doc
   */
  public static void uploadOtherFile(String directoryFile,String filename) {
	    Locale locale = Locale.getDefault(); 
		ResourceBundle localResource = ResourceBundle.getBundle("interfaceExchange", locale); 
		String host = localResource.getString("ip");
		String username = localResource.getString("username");
		String password = localResource.getString("pwd");
		String context =  localResource.getString("directory");
		String tempFile=context+directoryFile;
		//tempFile=tempFile.replace("/", File.separator);
		String tempDir=tempFile;
		if(tempFile.indexOf(".")>0){
			 tempDir=tempFile.substring(0,tempFile.lastIndexOf("/"));
		}
		if(StringUtils.isNotBlank(host)){
			 ChannelSftp sftp=SFTPUtil.connect(host, 22, username, password);
			    SFTPUtil.upload(tempDir, filename, sftp);
		}
		
 
  }
  
  /**
   * 文件上传到服务器指定目录(生成文件给方欣)
   * @param directoryFile 目录文件 如：/resource/AttachFile
   * @param filename 文件名称 如D:\test.doc
   */
  public static void uploadOtherFileForFx(String directoryFile,String filename) {
	    Locale locale = Locale.getDefault(); 
		ResourceBundle localResource = ResourceBundle.getBundle("interfaceExchange", locale); 
		String host = localResource.getString("ip");
		String username = localResource.getString("username");
		String password = localResource.getString("pwd");	
		if(StringUtils.isNotBlank(host)){
			ChannelSftp sftp=SFTPUtil.connect(host, 22, username, password);
			int index = directoryFile.lastIndexOf("/");
			String tempDir = directoryFile.substring(0, index+1);
		    SFTPUtil.upload(tempDir, filename, sftp);
		}
		
  }
  
  
	public static void main(String[] args) {
	SFTPUtil sf = new SFTPUtil();
	String host = "192.168.15.253";
	int port = 22;
	String username = "root";
	String password = "123456";
	String directory = "/EXDATA/Xzsp/SENDER/test1021";
	String uploadFile = "D:\\awrrpt_oa1.html";
	String downloadFile = "upload.txt";
	String saveFile = "D:\\tmp\\test.txt";
	String deleteFile = "delete.txt";
	ChannelSftp sftp=sf.connect(host, port, username, password);
	sf.upload(directory, uploadFile, sftp);
	//sf.download(directory, downloadFile, saveFile, sftp);
	//sf.delete(directory, deleteFile, sftp);
	try{
	//sftp.cd(directory);
	//sftp.mkdir("ss");
	//System.out.println("finished");
	}catch(Exception e){
	//e.printStackTrace();
	}
	//}
	}

}
